﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.IO;
using Reticulum.User;
using Reticulum.工具类;

namespace Reticulum
{
    public partial class PerfectInformation : Form
    {
        public PerfectInformation()
        {
            InitializeComponent();
        }

        private void textBox8_TextChanged(object sender, EventArgs e)
        {

        }


        public static string saveName;//文件名称
        public static string strPicPath;//图片存放路径（全路径）
        public static string extension;//文件后缀名（带点）
        public static string destFileName = ThisMyInfo.ImagePath;
        private void button1_Click(object sender, EventArgs e)
        {
            //UserAvatar Ua = new UserAvatar();
            //Ua.Show();

            // 实例化OpenFileDialog控件  (打开文件对话框)
            OpenFileDialog openPic = new OpenFileDialog();

            // Filter： 获取或设置当前文件名筛选器字符串，例如，“文本文件(.txt) |.txt | 所有文件(.) ||.”
            openPic.Filter = "图片文件|*.bmp;*.jpg;*.jpeg;*.png";

            // FilterIndex 在对话框中选择的文件筛选器的索引，如果选第一项就设为1
            openPic.FilterIndex = 1;

            // InitialDirectory：对话框的初始目录 - 获取桌面文件夹路径为初始地址  
            openPic.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);

            //判断我当前是否上传文件                                                                                    
            if (openPic.ShowDialog() == DialogResult.OK)
            {
                //FileInfo类说明
                #region
                /* FileInfo 类    命名空间:System.IO    相关网站：https://docs.microsoft.com/zh-cn/dotnet/api/system.io.fileinfo?redirectedfrom=MSDN&view=netcore-3.1
                 * 
                 * 说明：提供用于创建、复制、删除、移动和打开文件的属性和实例方法，并且帮助创建 FileStream 对象。 无法继承此类。
                 * 
                 * 属性：✦ Directory       -  属性检索一个对象，该对象表示文件的父目录。
                 *       ✦ DirectoryName   -  属性检索文件的父目录的完整路径。
                 *       ✦ Exists          -  属性检查是否存在文件，然后再对其进行操作。
                 *       ✦ IsReadOnly      -  属性检索或设置一个值，该值指定是否可以修改文件。
                 *       ✦ Length          -  检索文件的大小。
                 *       ✦ Name            -  检索文件的名称。
                 *       
                 * 枚举：★ FileAccess  -  指定对文件的读取和写入访问权限。
                 *       ★ FileShare   -  指定已在使用的文件所允许的访问级别。
                 *       ★ FileMode    -  指定是保留还是覆盖现有文件的内容，以及创建现有文件的请求是否会引发异常。
                 * **/
                #endregion

                //实例化FileInfo类，并获取用户选择的文件
                FileInfo fileInfo = new FileInfo(openPic.FileName);

                //判断文件大小不能超过20K，fileInfo.Length是以字节（B）为单位的,//1024B =1KB  1024K=1M
                if (fileInfo.Length > 5242880)
                {
                    MessageBox.Show("上传的图片不能大于5Mb");
                }
                else
                {
                    strPicPath = openPic.FileName;  //对文件名（strPicPath）称进行赋值

                    button1.BackgroundImage = Image.FromFile(strPicPath);  //将选择的文件展示给用户
                }

                extension = Path.GetExtension(strPicPath);  // 单独获取文件后缀名 (带点)

                saveName = Path.GetFileNameWithoutExtension(strPicPath);  // 单独获取文件名

                destFileName = Directory.GetCurrentDirectory() + "\\../../用户头像/" + saveName + extension;//放置到目标
            }
        }

        //圆形头像框
        private void button1_Paint(object sender, PaintEventArgs e)
        {
            Button btn = sender as Button;
            System.Drawing.Drawing2D.GraphicsPath btnPath = new System.Drawing.Drawing2D.GraphicsPath();
            System.Drawing.Rectangle newRectangle = btn.ClientRectangle;
            newRectangle.Inflate(-2, -1);
            e.Graphics.DrawEllipse(System.Drawing.Pens.BlanchedAlmond, newRectangle);
            newRectangle.Inflate(-2, -4);
            btnPath.AddEllipse(newRectangle);
            btn.Region = new System.Drawing.Region(btnPath);
        }

        private void textBox9_TextChanged(object sender, EventArgs e)
        {
            textBox9.ForeColor = Color.Black;
        }

        private void PerfectInformation_Load(object sender, EventArgs e)
        {
            //显示用户详细信息
            textBox1.Text = ThisMyInfo.UserName ;//昵称
            comboBox1.Text = ThisMyInfo.Sex;//性别
            dateTimePicker1.Text = ThisMyInfo.Birthday ;//生日
            comboBox2.Text = ThisMyInfo.BloodGroup;//血型
            textBox3.Text = ThisMyInfo.MySignature;//签名
            textBox4.Text = ThisMyInfo.Occupational;//职业
            textBox5.Text = ThisMyInfo.Company;//公司
            textBox6.Text = ThisMyInfo.Area;//所在地区
            textBox7.Text = ThisMyInfo.Hometown;//家乡
            textBox8.Text = ThisMyInfo.UserPhone;//电话
            textBox9.Text = ThisMyInfo.Email;//邮箱
            textBox10.Text = ThisMyInfo.MyDescription;//个人说明
            textBox2.Text = ThisMyInfo.UserAccount;//账号
            //显示用户头像
            this.button1.BackgroundImage = ImageShow.IamgeShows();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //如果我修改了头像则覆盖
            if (ThisMyInfo.ImagePath != destFileName)
            {
                

                var DML = string.Format("update Users set ImagePath='{0}' where UserID='{1}'", destFileName, ThisMyInfo.UserID);
                File.Copy(strPicPath, destFileName, true);

                if (DBHelps.Command(DML) == false)
                {
                    MessageBox.Show("头像设置失败");
                }
            }
            
            //邮箱 验证通过-----------------------
            bool Verify = false;
            int Pass = textBox9.Text.IndexOf("@");
            if (textBox9.Text != ""  &&  Pass == -1)
            {
                textBox9.ForeColor = Color.Red;
            }
            else{ Verify = true; }
            //------------------------------------


            if (Verify)
            {
                string sql = string.Format("update Users set UserName='{0}',Sex='{1}',Birthday='{2}',BloodGroup='{3}',MySignature='{4}',Occupational='{5}',Company" +
                "='{6}',Area='{7}',Hometown='{8}',Email='{9}',MyDescription='{10}',UserPhone='{11}',ImagePath='{12}' where UserID='{13}'", 
                textBox1.Text, comboBox1.Text, dateTimePicker1.Text, comboBox2.Text, textBox3.Text, textBox4.Text, textBox5.Text,
                 textBox6.Text, textBox7.Text, textBox9.Text, textBox10.Text,textBox8.Text,destFileName, ThisMyInfo.UserID);

                bool Results = DBHelps.Command(sql);
                if (Results) 
                { 
                    //更新目前正在操作的用户的信息
                    ThisMyInfo.ThisUser();
                    this.Close();
                }
                else { MessageBox.Show("保存失败"); }
            }
            else
            {
                MessageBox.Show("请输入正确格式");
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            destFileName = ThisMyInfo.ImagePath;
            this.Close();
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }
    }
}
